/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
 // 迭代算法
func levelOrder(root *TreeNode) [][]int {
    res := [][]int{}
    if root == nil {
        return res
    }

    // 初始化队列
    queue := list.New()
    queue.PushBack(root)

    // 每层节点临时存放
    tempArr := []int{}

    // 处理队列信息
    for queue.Len() > 0 {
        // 记录当前层的所有节点
        length := queue.Len()
        for i:=0 ; i<length ; i++ {
            node := queue.Remove(queue.Front()).(*TreeNode)
            // 左节点放入队列
            if node.Left != nil {
                queue.PushBack(node.Left)
            }
            // 右节点放入队列
            if node.Right != nil {
                queue.PushBack(node.Right)
            }
            // 将当前层的节点存起来
            tempArr = append(tempArr, node.Val)
        }
        // 放入结果集
        res = append(res, tempArr)
        // 清空临时存放
        tempArr = []int{}
    }
    
    return res
}